package com.cango.student.algorithm.sort;

import java.lang.ref.SoftReference;

/**
 * 将元素均为0、1、2的数组排序。
 * 遍历三种数据，并打印
 */
public class ArraySort123 {
    /*借鉴《算法》中，当数组中存在大量重复元素时，对快排partition方法的改进。
     *即三个指针，把数组划分成三部分，<x、=x、>x*/
    public void sortarray2(int[] nums) {
        int a = 0;// 指向下一个存放0的位置
        int b = nums.length - 1; // 从右向左，下一个存放2的位置
        int i = a; // 1的指针，不停的走
        while (i <= b) {
            if (nums[i] == 1)
                i++;
            else if (nums[i] == 2)
                exchange(nums, i, b--);
            else
                // 0的，先i与a互换，然后都加1
                exchange(nums, i++, a++);
        }
    }

    public void exchange(int[] nums, int a, int b) {
        int tmp = nums[a];
        nums[a] = nums[b];
        nums[b] = tmp;
    }

    public static void main(String[] args) {

    }
}
